home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / hplip / installer / dcheck.py < prev    next >
Text File  |  2009-10-09  |  6KB  |  223 lines

  1. # -*- coding: utf-8 -*-
  2. #
  3. # (c) Copyright 2003-2007 Hewlett-Packard Development Company, L.P.
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  18. #
  19. # Author: Don Welch
  20. #
  21.  
  22. # Std Lib
  23. import os
  24. import os.path
  25. import re
  26. import sys
  27.  
  28. # Local
  29. from base.g import *
  30. from base import utils
  31.  
  32.  
  33. ver_pat = re.compile("""(\d+.\d+)""", re.IGNORECASE)
  34. proc_pat = re.compile(r"""(\d+)""", re.I)
  35.  
  36. ld_output = ''
  37. #ps_output = ''
  38. mod_output = ''
  39.  
  40.  
  41.  
  42. def update_ld_output():
  43.     # For library checks
  44.     global ld_output
  45.     status, ld_output = utils.run('%s -p' % os.path.join(utils.which('ldconfig'), 'ldconfig'), log_output=False)
  46.  
  47.     if status != 0:
  48.         log.debug("ldconfig failed.")
  49.  
  50. def check_tool(cmd, min_ver=0.0):
  51.     log.debug("Checking: %s (min ver=%f)" % (cmd, min_ver))
  52.     status, output = utils.run(cmd)
  53.  
  54.     if status != 0:
  55.         log.debug("Not found!")
  56.         return False
  57.     else:
  58.         if min_ver:
  59.             try:
  60.                 line = output.splitlines()[0]
  61.             except IndexError:
  62.                 line = ''
  63.             log.debug(line)
  64.             match_obj = ver_pat.search(line)
  65.             try:
  66.                 ver = match_obj.group(1)
  67.             except AttributeError:
  68.                 ver = ''
  69.  
  70.             try:
  71.                 v_f = float(ver)
  72.             except ValueError:
  73.                 return False
  74.             else:
  75.                 log.debug("Ver=%f Min ver=%f" % (v_f, min_ver))
  76.  
  77.                 if v_f < min_ver:
  78.                     log.debug("Found, but newer version required.")
  79.  
  80.                 return v_f >= min_ver
  81.         else:
  82.             log.debug("Found.")
  83.             return True
  84.  
  85.  
  86. def check_lib(lib, min_ver=0):
  87.     log.debug("Checking for library '%s'..." % lib)
  88.  
  89.     if ld_output.find(lib) >= 0:
  90.         log.debug("Found.")
  91.  
  92.         #if min_ver:
  93.         #    pass
  94.         #else:
  95.         return True
  96.     else:
  97.         log.debug("Not found.")
  98.         return False
  99.  
  100. def check_file(f, dir="/usr/include"):
  101.     log.debug("Searching for file '%s' in '%s'..." % (f, dir))
  102.     for w in utils.walkFiles(dir, recurse=True, abs_paths=True, return_folders=False, pattern=f):
  103.         log.debug("File found at '%s'" % w)
  104.         return True
  105.  
  106.     log.debug("File not found.")
  107.     return False
  108.  
  109.  
  110. def locate_files(f, dir):
  111.     log.debug("Searching for file(s) '%s' in '%s'..." % (f, dir))
  112.     found = []
  113.     for w in utils.walkFiles(dir, recurse=True, abs_paths=True, return_folders=False, pattern=f):
  114.         log.debug(w)
  115.         found.append(w)
  116.  
  117.     if found:
  118.         log.debug("Found files: %s" % found)
  119.     else:
  120.         log.debug("No files not found.")
  121.  
  122.     return found
  123.  
  124. def locate_file_contains(f, dir, s):
  125.     """
  126.         Find a list of files located in a directory
  127.         that contain a specified sub-string.
  128.     """
  129.     log.debug("Searching for file(s) '%s' in '%s' that contain '%s'..." % (f, dir, s))
  130.     found = []
  131.     for w in utils.walkFiles(dir, recurse=True, abs_paths=True, return_folders=False, pattern=f):
  132.  
  133.         if check_file_contains(w, s):
  134.             log.debug(w)
  135.             found.append(w)
  136.  
  137.     if found:
  138.         log.debug("Found files: %s" % found)
  139.     else:
  140.         log.debug("No files not found.")
  141.  
  142.     return found
  143.  
  144. def check_file_contains(f, s):
  145.     log.debug("Checking file '%s' for contents '%s'..." % (f, s))
  146.     try:
  147.         if os.path.exists(f):
  148.             for a in file(f, 'r'):
  149.                 update_spinner()
  150.  
  151.                 if s in a:
  152.                     log.debug("'%s' found in file '%s'." % (s.replace('\n', ''), f))
  153.                     return True
  154.  
  155.         log.debug("Contents not found.")
  156.         return False
  157.  
  158.     finally:
  159.         cleanup_spinner()
  160.  
  161.  
  162. def get_process_list():
  163.     processes = [] # (pid, cmdline), ...
  164.     for x in utils.walkFiles("/proc", False, True, True):
  165.         s = proc_pat.search(x) 
  166.         if s is not None:
  167.             try:
  168.                 cmdline = file(os.path.join(x, 'cmdline'), 'r').read().replace('\x00', '').replace('\n', '').strip()
  169.             except IOError:
  170.                 cmdline = None
  171.                 
  172.             if cmdline:
  173.                 processes.append((int(s.group(1)), cmdline))
  174.  
  175.     return processes
  176.  
  177.  
  178. def check_ps(process_list):
  179.     log.debug("Searching any process(es) '%s' in running processes..." % process_list)
  180.     processes = get_process_list()
  181.  
  182.     try:
  183.         for pid, cmdline in processes:
  184.             update_spinner()
  185.             for p in process_list:
  186.                 if p in cmdline:
  187.                     log.debug("'%s' found." % cmdline)
  188.                     return True
  189.  
  190.         log.debug("Not found")
  191.         return False
  192.  
  193.     finally:
  194.         cleanup_spinner()
  195.  
  196.  
  197. def get_ps_pid(process):
  198.     log.debug("Searching for the PID for process '%s' in running processes..." % process)
  199.     processes = get_process_list()
  200.  
  201.     try:
  202.         for pid, cmdline in processes:
  203.             update_spinner()
  204.             if process in cmdline:
  205.                 log.debug("'%s' found." % cmdline)
  206.                 return pid
  207.  
  208.         log.debug("Not found")
  209.         return 0
  210.  
  211.     finally:
  212.         cleanup_spinner()
  213.  
  214.  
  215. def check_lsmod(module):
  216.     global mod_output
  217.  
  218.     if not mod_output:
  219.         lsmod = utils.which('lsmod')
  220.         status, mod_output = utils.run(os.path.join(lsmod, 'lsmod'), log_output=False)
  221.  
  222.     return mod_output.find(module) >= 0
  223.